package com.runtu.domain.activity.service.discount;

import com.runtu.domain.activity.adapter.repository.IActivityRepository;
import com.runtu.domain.activity.model.valobj.DiscountTypeEnum;
import com.runtu.domain.activity.model.valobj.GroupBuyActivityDiscountVO;
import lombok.extern.slf4j.Slf4j;

import javax.annotation.Resource;
import java.math.BigDecimal;

/**
 * @ClassName AbstractDiscountCalculateService
 * @Description 折扣计算服务抽象类
 * @date 2025/7/19 20:41
 * @Version 1.0
 */
@Slf4j
public abstract class AbstractDiscountCalculateService implements IDiscountCalculateService {

    @Resource
    protected IActivityRepository repository;


    @Override
    public BigDecimal calculate(String userId, BigDecimal originalPrice, GroupBuyActivityDiscountVO.GroupBuyDiscount groupBuyDiscount) {
        /*过滤人群 因为不同的人群可能给的优惠不一样*/
        //如果有人群标签 过滤一下
        if (DiscountTypeEnum.TAG.equals(groupBuyDiscount.getDiscountType())){
            boolean isCrowrange=filterTagId(userId,groupBuyDiscount.getTagId());//判断当前用户是不是属于特殊折扣人群范围
            if (!isCrowrange){
                log.info("折扣优惠计算拦截 userId:{}",userId);

                return originalPrice;
            }
        }



        return doCalculate(originalPrice,groupBuyDiscount);
    }


    //人群过滤-限定人群优惠
    private boolean filterTagId(String userId, String tagId) {
        //Todo:后面要用具体过滤 再写
        return repository.isTagCrowRange(tagId,userId);
    }


    //具体计算结果 那种打折折扣的子类要用，取继承然后重写实现就行了。
    protected abstract BigDecimal doCalculate(BigDecimal originalPrice, GroupBuyActivityDiscountVO.GroupBuyDiscount groupBuyDiscount);



}
